home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / a / a_funk / packet2.tos / TNCSWITC / TNCUMSCH.ASS next >
Encoding:
Text File  |  1995-05-01  |  6.0 KB  |  162 lines

  1. bbs> Msg# 72676   To: ATARI @ALLE   From: DG3YFU   Date: 30Aug90/1352
  2. Subject: 2TNC Switch/ACC&PRG
  3. Bulletin ID: 308004DB0SHG
  4. Path: DB0IE!DB0GV!DB0EAM!DB0KG!DK0MAV!DB0SHG
  5. de DG3YFU @ DB0SHG
  6.  
  7. Das Programm kann sowohl als ACC wie auch als PRG benutzt werden. Es wird
  8. dabei DTR zur TNC Umschaltung benutzt. Es sollte mit (fast) jedem Assembler
  9. zu überstzen sein, (Devpack,MadMac,Skeka..).
  10. ;************************************************************************
  11. ;* Ein kleines Programm Ulschalten der TNC's                            *
  12. ;* Das Programm läuft als ACC & PRG (nur umbenennen!).                  *
  13. ;************************************************************************
  14.  
  15. appl_init       EQU $0A000100
  16. menu_register   EQU $23010101           ;Auszug aus der GEM-Library
  17. evnt_mesag      EQU $17000101
  18. form_alert      EQU $34010101
  19.  
  20.                 TEXT
  21.  
  22. start:          move.l  A0,D0           ;Zeiger auf die Basepage, wenn ACC
  23.                 bne.s   start1          ;0<> kein ACC =>
  24.                 st      app             ;-1=PRG (0 steht für ACC)
  25.                 move.l  4(SP),D0        ;Basepage vom Stack holen
  26. start1:
  27.                 lea     own_stack(PC),SP ;Eigenen Stack einrichten (für ACC nötig!)
  28.  
  29.                 pea     ende-start+$0100.w ;Programmlänge
  30.                 move.l  D0,-(SP)           ;Basepageadr des Starters
  31.                 move.l  #$4A0000,-(SP)
  32.                 trap    #1              ;Setblock()
  33.                 lea     12(SP),SP
  34.  
  35.                 move.l  #appl_init,D0
  36.                 bsr.w   aes             ;appl_init()
  37.                 lea     addr_in(PC),A6
  38.                 lea     int_in(PC),A5   ;zwei globale Variablen
  39.  
  40.                 btst    #7,app(PC)      ;PC-relative-Adressierung
  41.                 bne.s   do_it           ;wenn PRG direkt starten
  42.  
  43.                 move.w  D0,(A5)         ;appl_id
  44.                 lea     acc_name(PC),A0
  45.                 move.l  A0,(A6)
  46.                 move.l  #menu_register,D0
  47.                 bsr.w   aes             ;menu_register()
  48.  
  49. ;************************************************************************
  50. ;* Die Hauptschleife des ACCs                                           *
  51. ;************************************************************************
  52.  
  53. mainloop:       lea     evnt_buff(PC),A0
  54.                 move.l  A0,(A6)
  55.                 move.l  #evnt_mesag,D0
  56.                 bsr.w   aes             ;evnt_mesag()
  57.                 moveq   #40,D0
  58.                 cmp.w   (A0),D0
  59.                 bne.s   mainloop        ;ACC_OPEN?
  60.  
  61. do_it:          move.w  #14,-(sp)       ;get TNC Status
  62.                 move.w  #0,-(sp)
  63.                 move.w  #28,-(sp)
  64.                 trap    #14
  65.                 addq.l  #6,sp
  66.                 move.w  #1,TNCaktiv
  67.                 and.w   #16,d0
  68.                 beq.s   goon0
  69.                 move.w  #2,TNCaktiv
  70. goon0           ;
  71.                 move.w  #3,d0
  72.                 sub.w   TNCaktiv,d0
  73.                 move.w  d0,(A5)
  74.                 move.w  TNCaktiv,d0
  75.                 add.w   #47,d0
  76.                 move.b  d0,TNCnumm
  77.                 lea     acc_alert(PC),A0
  78.                 move.l  A0,(A6)
  79.                 move.l  #form_alert,D0
  80.                 bsr.s   aes             ;form_alert()
  81.                 ;
  82.                 cmp.w   #2,d0
  83.                 beq.s   goon1
  84.                 move.w  #$ffff-16,-(sp) ;Setze TNC 0
  85.                 move.w  #29,-(sp)
  86.                 trap    #14
  87.                 addq.l  #4,sp
  88.                 bra.s   goon2
  89. goon1           move.w  #16,-(sp)       ;Setze TNC 1
  90.                 move.w  #30,-(sp)
  91.                 trap    #14
  92.                 addq.l  #4,sp
  93.                 ;
  94. goon2           btst    #7,app(PC)
  95.                 beq.w   mainloop        ;wenn ACC in die Event-Schleife zurück
  96.                 clr.w   -(SP)
  97.                 trap    #1              ;sonst Pterm0()
  98.  
  99. ;************************************************************************
  100. ;* Mein eigener kleiner AES-Aufruf                                      *
  101. ;* D0=Die ersten 4 Einträge im int_in-Array (Bytebreite!)               *
  102. ;************************************************************************
  103.  
  104. aes:            movem.l D1-A6,-(SP)
  105.                 lea     contrl(PC),A0
  106.                 clr.l   (A0)
  107.                 clr.l   4(A0)           ;int_in-Array löschen
  108.                 movep.l D0,1(A0)        ;und die neuen Daten eintragen
  109.                 lea     aes_para_blk(PC),A0
  110.                 move.l  A0,D1
  111.                 move.w  #$C8,D0
  112.                 trap    #2              ;AES aufrufen
  113.                 move.w  int_out(PC),D0
  114.                 movem.l (SP)+,D1-A6
  115.                 rts
  116.  
  117. ;************************************************************************
  118. ;* Nun ein paar wichtige Daten                                          *
  119. ;************************************************************************
  120.  
  121.                 DATA
  122.  
  123. TNCaktiv        DC.W 1
  124.  
  125. aes_para_blk:   DC.L contrl
  126.                 DC.L global
  127.                 DC.L int_in
  128.                 DC.L int_out
  129.                 DC.L addr_in
  130.                 DC.L addr_out
  131.  
  132. acc_name:       DC.B '  TNC Switcher',0
  133. acc_alert:      DC.B '[0][TNC-Umschaltung  |'
  134.                 DC.B 'z.Zt.aktiv TNC'
  135. TNCnumm:        DC.B 'X][TNC0|TNC1]',0
  136.  
  137. ;************************************************************************
  138. ;* Und ordentlich Zwischenspeicher                                      *
  139. ;************************************************************************
  140.  
  141.                 BSS
  142.  
  143. global:         DS.W 15
  144. contrl:         DS.W 5
  145. int_in:         DS.W 16
  146. int_out:        DS.W 7
  147. addr_in:        DS.L 2
  148. addr_out:       DS.L 1
  149. evnt_buff:      DS.W 8
  150. app:            DS.W 1                  ;0=ACC, -1=PRG
  151.                 DS.L 128                ;jedem Programm seinen eigenen Stack
  152.  
  153. own_stack:      DS.L 0
  154.  
  155. ende:           END
  156.  
  157. ;************************************************************************
  158. Das Programm sollte etwa 400 Bytes lang werden (sehr kompakt) und je nach
  159. Namen als PRG oder ACC laufen.
  160. 73 de DG3YFU @ DB0EAM
  161.  
  162.